package work.hutool.convert;

import cn.hutool.core.convert.Convert;
import cn.hutool.core.lang.TypeReference;
import cn.hutool.core.util.CharsetUtil;
import work.entity.User;

import java.util.*;

/**
 * 背景: 关于类型转换
 * Java开发中我们要面对各种各样的类型转换问题
 * 常用的办法是先整成String，然后调用XXX.parseXXX方法，还要承受转换失败的风险，不得不加一层try catch
 *
 * Convert类可以说是一个工具方法类，里面封装了针对Java常见类型的转换，
 * 用于简化类型转换。Convert类中大部分方法为toXXX，参数为Object
 */
public class ConvertTest01 {
    public static void main(String[] args) {
        // 类型转换 一般的做法
        // try catch防止转化失败报错
        String s1 = "AAA";
        try {
            Integer int1 = Integer.parseInt(s1);
        } catch (NumberFormatException ex) {
            System.out.println("转化失败");
        }

        // Convert进行类型转化的时候 如果转化失败的话 返回值是null
        // 第二个参数defaultValue用于在转换失败时返回一个默认值。
        Integer int2 = Convert.toInt(s1);
        Date date1 = Convert.toDate("AAA");
        Date date2 = Convert.toDate("2021/11/12");

        // 数组转化为字符串String
        // Convert.toStr(Object)的参数是object list也可以转化成字符串 实际作用不大
        long[] b = {1,2,3,4,5};
        String bStr = Convert.toStr(b);
        System.out.println(bStr);
        List<User> list1 = new ArrayList<>();
        list1.add(new User("1","A","A"));
        list1.add(new User("2","B","B"));
        String listStr = Convert.toStr(list1);
        System.out.println(listStr);

        // 转换为指定类型数组 Convert.toIntArray(Object)
        String[] b1 = { "1", "2", "3", "4" };
        Integer[] intArray = Convert.toIntArray(b1);

        // 转化为list对象 一般是数组转化为list用的比较多
        // 自行new一个TypeReference对象可以对嵌套泛型进行类型转换
        Object[] arr = {"a", "你", "好", "", 1};
        List<?> list = Convert.toList(arr);
        List<String> list2 = Convert.convert(new TypeReference<List<String>>() {}, arr);

        System.out.println("AAA");
    }
}
